//******************************************************************
//  ExceptionScope.java  Java Foundations
//
//  Demonstrates exception propagation.
//*******************************************************************
public class ExceptionScope
{
   //---------------------------------------------------------------
   //  Catches and handles the exception that is throw in level3.
   //---------------------------------------------------------------
   public void level1()
   {
     System.out.println("Level 1 beginning.");
     try
     {
        level2();
     }
     catch (ArithmeticException problem)
     {
       System.out.println ();
       System.out.println ("The exception message is: " +
                            problem.getMessage());
       System.out.println ();
       System.out.println ("The call stack trace:");
       problem.printStackTrace();
       System.out.println ();
     }
     System.out.println("Level 1 ending.");
}

//---------------------------------------------------------------
//  Serves as an intermediate level. The exception propagates
//  through this method back 2o level1.
//---------------------------------------------------------------
public void level2()
{
  System.out.println("Level 2 begnning.");
  level3 ();
  System.out.println("Level 2 ending.");
}

//--------------------------------------------------------------------
//  Performs a calulation to produce an exception.  It is not
//  caught and handled at this level.
//--------------------------------------------------------------------
public void level3 ()
{
  int numerator = 10, denominator = 0;

  System.out.println("Level 3 beginning.");
  int result = numerator / denominator;
  System.out.println("Level 3 ending.");
}
}
